package edu.uoc.tds.pec4.client;


import java.awt.EventQueue;
import java.awt.Toolkit;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import edu.uoc.tds.pec4.beans.ConvocatoriaCurso;
import edu.uoc.tds.pec4.beans.Grupo;
import edu.uoc.tds.pec4.beans.InformeMatricula;
import edu.uoc.tds.pec4.beans.Matricula;
import edu.uoc.tds.pec4.client.gestion.ControladorConexion;
import edu.uoc.tds.pec4.i18n.TDSLanguageUtils;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.TextArea;



public class PanelEstadoMatUI extends JFrame {

	/**
	 * @author asosal
	 *
	 */
	private static final long serialVersionUID = 2202567585921466965L;
	private JPanel contentPane;
	private static int idUsuario;
	private static String locale="ES";
	private JTable tblMat;
	private List<InformeMatricula> listaInforme;
	private List<Matricula> listaMatriculas;
	private List<Integer> idMatTable = new ArrayList<Integer>(); 
	private final DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					PanelEstadoMatUI frame = new PanelEstadoMatUI();
					frame.setVisible(true);
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("error.general"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
				}
			}
		});
	}

	/**
	 * Create the frame.
	 * @param panelMenu 
	 */
	public PanelEstadoMatUI() 
	{
		/**Obtenemos la info de Usuario del menu Principal.*/	
		
		setIdUsuario(PanelMenusUI.getIdUsuario());
		setIdioma(PanelMenusUI.getIdioma());
		
		TDSLanguageUtils.setDefaultLanguage("i18n/"+locale+"_messages");
		setTitle(TDSLanguageUtils.getMessage("lbl.mat.Titulo.Frame"));
		setIconImage (Toolkit.getDefaultToolkit().getImage(PanelEstadoMatUI.class.getResource("LogoTurva.gif")));
		setDefaultCloseOperation(HIDE_ON_CLOSE);
		initComponents();
		loadMatriculas();
	}


public void initComponents()
{
	setBounds(100, 100, 620, 620);
	contentPane = new JPanel();
	contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
	setContentPane(contentPane);
	contentPane.setLayout(null);
	
	JScrollPane PanelMat = new JScrollPane();
	PanelMat.setBounds(10, 55, 581, 192);
	contentPane.add(PanelMat);
	
	tblMat = new JTable();
	tblMat.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
	tblMat.setModel(new DefaultTableModel(
		new Object[][] {
		},
		new String[] {
			TDSLanguageUtils.getMessage("tbl.mat.nombre"), TDSLanguageUtils.getMessage("tbl.mat.fechaInicio"),TDSLanguageUtils.getMessage("tbl.mat.fechafin"),TDSLanguageUtils.getMessage("tbl.mat.turno"),TDSLanguageUtils.getMessage("tbl.mat.estado")
		}
	) {
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;
		boolean[] columnEditables = new boolean[] {
			true, false, false, true, true
		};
		public boolean isCellEditable(int row, int column) {
			return columnEditables[column];
		}
	});
	
	PanelMat.setColumnHeaderView(tblMat);
	PanelMat.setViewportView(tblMat);
	
	JButton btnVolver = new JButton(TDSLanguageUtils.getMessage("btn.mat.Volver"));
	btnVolver.addMouseListener(new java.awt.event.MouseAdapter() 
    {
		   public void mouseReleased(java.awt.event.MouseEvent evt)
           {
                btnVolverMouseReleased(evt);
           }

			private void btnVolverMouseReleased(java.awt.event.MouseEvent evt) 
			{  	
				cierra();			
			}
					
});
	btnVolver.setBounds(404, 258, 187, 30);
	contentPane.add(btnVolver);
	
	JLabel lblEstadoDeLas = new JLabel(TDSLanguageUtils.getMessage("lbl.mat.Titulo.estadoMat"));
	lblEstadoDeLas.setFont(new Font("Tahoma", Font.BOLD, 12));
	lblEstadoDeLas.setBounds(10, 30, 261, 14);
	contentPane.add(lblEstadoDeLas);
	final TextArea txtDetalleMat = new TextArea();
	txtDetalleMat.setText("");
	txtDetalleMat.setFont(new Font("Dialog", Font.BOLD, 12));
	txtDetalleMat.setEditable(false);
	txtDetalleMat.setBounds(7, 348, 584, 235);
	contentPane.add(txtDetalleMat);
	
	JLabel lblDetalles = new JLabel(TDSLanguageUtils.getMessage("lbl.mat.detalleMat"));
	lblDetalles.setFont(new Font("Tahoma", Font.BOLD, 12));
	lblDetalles.setBounds(10, 315, 261, 14);
	contentPane.add(lblDetalles);
	
	JButton btnInfoMat = new JButton(TDSLanguageUtils.getMessage("btn.mat.detalle"));
	btnInfoMat.addMouseListener(new java.awt.event.MouseAdapter() 
    {
		   public void mouseReleased(java.awt.event.MouseEvent evt)
           {
                btnInfoMatMouseReleased(evt);
           }

			private void btnInfoMatMouseReleased(java.awt.event.MouseEvent evt) 
			{  	
				if(tblMat.getSelectedRow()<0)JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("Advertencia.noMat.Seleccionado"), TDSLanguageUtils.getMessage("cliente.advertencia.titulo"), 2);
   				else {
   					try { 				
   						listaInforme=ControladorConexion.listaInfomeMatriculas("and idmatricula="+idMatTable.get(tblMat.getSelectedRow()));
   					    String label = listaInforme.get(0).infoMatAlumno();					
   						txtDetalleMat.setText(label);
   							
   					} catch (RemoteException e) {
   						JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
   					} catch (SQLException e) {
   						JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("mensaje.remoto.conexionFallida"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);					
   					} catch (Exception e) {
   						JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("error.general"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);

   					}
   				  }
   			}								
			
					
});
	btnInfoMat.setBounds(10, 258, 187, 30);
	contentPane.add(btnInfoMat);
	
	
	
}
protected void cierra() 
{
	
 this.dispose();	
}

void loadMatriculas() {
	try {
		
		listaMatriculas=ControladorConexion.listaMatriculas("where idalumno="+getIdUsuario());	

	DefaultTableModel dtmConv = new DefaultTableModel(){

	    /**
		 * 
		 */
		private static final long serialVersionUID = 4673965177498440137L;

		@Override
	    public boolean isCellEditable(int row, int column) {
	       //all cells false
	       return false;
	    }
	};
	dtmConv.addColumn(TDSLanguageUtils.getMessage("tbl.mat.nombre"));
	dtmConv.addColumn(TDSLanguageUtils.getMessage("tbl.mat.fechaInicio"));
	dtmConv.addColumn(TDSLanguageUtils.getMessage("tbl.mat.fechafin"));
	dtmConv.addColumn(TDSLanguageUtils.getMessage("tbl.mat.turno"));
	dtmConv.addColumn(TDSLanguageUtils.getMessage("tbl.mat.estado"));
	idMatTable.removeAll(idMatTable);
	 for (Matricula m : listaMatriculas) 
	 {
		 
		 Grupo g=ControladorConexion.getGrupo(m.getIdGrupo());
		 ConvocatoriaCurso c=ControladorConexion.getConvocatoria(g.getIdCurso());
		 idMatTable.add(m.getIdMatricula());
		 Object[] data = {c.getNombre(),sdf.format(c.getFechaDesde()),sdf.format(c.getFechaHasta()),g.getTurno(),m.getEstado()};
		 dtmConv.addRow(data);
	 }	 
	 tblMat.setModel(dtmConv);
     tblMat.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); 
     
	} catch (RemoteException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("cliente.error.conectar"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);
	} catch (SQLException e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("mensaje.remoto.conexionFallida"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);					
	} catch (Exception e) {
		JOptionPane.showMessageDialog(null, TDSLanguageUtils.getMessage("error.general"), TDSLanguageUtils.getMessage("cliente.error.titulo"), 0);

	}
	
}
	public static int getIdUsuario() {
		return idUsuario;
	}

	public static void setIdUsuario(int id) {
		idUsuario = id;
	}
	public static void setIdioma(String idioma) {
		locale = idioma;
	}
}
